home *** CD-ROM | disk | FTP | other *** search
/ Stone Design / Stone Design.iso / Stone_Friends / Wave / WavesWorld / Source / IBPalettes / WWTCLKit / PAThumbWheel.m < prev    next >
Encoding:
Text File  |  1995-03-22  |  6.7 KB  |  203 lines

  1. #import "PAThumbWheel.h"
  2. #import "PAThumbWheelCell.h"
  3.  
  4. static id TWCellClass = nil;
  5.  
  6. /******************************************************************************
  7.     PAThumbWheelCell
  8.     
  9. PAThumbWheel offers the functionality of Slider plus the features that you would expect from a real thumbwheel (including 2 3/4 D Graphics!).
  10.  
  11. PAThumbWheel has a linear display mode and a radial display mode and offers the ability to assign a value to the visible region of the control as well as an absolute value that the ThumbWheel will either ignore, bound to or wrap around.
  12.  
  13. PAThumbWheel can also return relative values via its -relativeIntValue & -relativeFloatValue methods. A snap back option allows mouse loops to start from and return to a base value.
  14.  
  15. Copyright 1992, Jeff Martin. (jmartin@next.com 415-780-3833)
  16. ******************************************************************************/
  17.  
  18. @implementation PAThumbWheel
  19.  
  20. + setCellClass:factoryId
  21. {
  22.     TWCellClass = factoryId;
  23.     return self;
  24. }
  25.  
  26. - (BOOL)acceptsFirstMouse {return YES;}
  27.  
  28. - initFrame:(const NXRect *)f
  29. {
  30.   const char  *dragTypes[] = { NXColorPboardType, NULL};
  31.  
  32.  
  33.   [super initFrame:f];
  34.   [self registerForDraggedTypes:dragTypes count:1];
  35.  
  36.   if(TWCellClass) [self setCell:[[TWCellClass alloc] init]];
  37.   else [self setCell:[[PAThumbWheelCell alloc] init]];
  38.   return self;
  39. }
  40.  
  41. - awake
  42. {
  43.   const char  *dragTypes[] = { NXColorPboardType, NULL};
  44.  
  45.  
  46.   [super awake];
  47.   [self registerForDraggedTypes:dragTypes count:1];
  48.   return self;
  49. }
  50.  
  51.  
  52. - free
  53. {
  54.    const char *fileType[] = { "" };
  55.    Pasteboard *pboard = [Pasteboard newName:NXDragPboard];
  56.  
  57.  
  58.    [pboard declareTypes:fileType num:0 owner:nil];
  59.    [self unregisterDraggedTypes];
  60.  
  61.    return [super free];
  62. }
  63.  
  64. // Direction: vertical or horizontal
  65. - (int)direction { return [cell direction]; }
  66. - setDirection:(int)dir { [cell setDirection:dir]; return self; }
  67. - takeDirectionFromMatrix:sender
  68. { [cell setDirection:[sender selectedTag]]; [self display]; return self; }
  69. - (BOOL)isVertical { return [(PAThumbWheel *)cell isVertical]; }
  70. - setVertical { [cell setVertical]; return self; }
  71. - (BOOL)isHorizontal { return [cell isHorizontal]; }
  72. - setHorizontal { [cell setHorizontal]; return self; }
  73.  
  74. // DisplayMode: radial or linear
  75. - (int)displayMode { return [cell displayMode]; }
  76. - setDisplayMode:(int)mode { [cell setDisplayMode:mode]; return self; }
  77. - takeDisplayModeFromMatrix:sender
  78. { [cell setDisplayMode:[sender selectedTag]]; [self display]; return self; }
  79. - toggleDisplayMode:sender
  80. { [cell setDisplayMode:![cell displayMode]]; [self display]; return self; }
  81. - (BOOL)isRadial { return [cell isRadial]; }
  82. - setRadial { [cell setRadial]; return self; }
  83. - (BOOL)isLinear { return [cell isLinear]; }
  84. - setLinear { [cell setLinear]; return self; }
  85.  
  86. // Visible min and max
  87. - (float)visibleMax { return [cell visibleMax]; }
  88. - setVisibleMax:(float)max 
  89. {   
  90.    [cell setVisibleMax:max]; return self; 
  91. }
  92. - takeVisibleMaxFrom:sender
  93. {   
  94.    [cell setVisibleMax:[sender floatValue]]; [self display]; return self; 
  95. }
  96.  
  97. - (float)visibleMin { return [cell visibleMin]; }
  98. - setVisibleMin:(float)min
  99. {   
  100.    [cell setVisibleMin:min]; return self; 
  101. }
  102. - takeVisibleMinFrom:sender
  103. {   
  104.    [cell setVisibleMin:[sender floatValue]]; [self display]; return self; 
  105. }
  106.  
  107. - (float)visibleRange { return [cell visibleRange]; }
  108. - (float)middleValue { return [cell middleValue]; }
  109.  
  110. // Absolute mode: unbounded, bounded or wrapped
  111. - (int)absoluteMode { return [cell absoluteMode]; }
  112. - setAbsoluteMode:(int)mode { [cell setAbsoluteMode:mode]; return self; }
  113. - takeAbsoluteModeFromMatrix:sender
  114. { [cell setAbsoluteMode:[sender selectedTag]]; [self display]; return self; }
  115. - (BOOL)isUnbounded { return [cell isUnbounded]; }
  116. - setUnbounded { [cell setUnbounded]; return self; }
  117. - (BOOL)isBounded { return [cell isBounded]; }
  118. - setBounded { [cell setBounded]; return self; }
  119. - (BOOL)isWrapped { return [cell isWrapped]; }
  120. - setWrapped { [cell setWrapped]; return self; }
  121. - (float)absoluteMax { return [cell absoluteMax]; }
  122. - setAbsoluteMax:(float)value { [cell setAbsoluteMax:value]; return self; }
  123. - takeAbsoluteMaxFrom:sender
  124. { [cell setAbsoluteMax:[sender floatValue]]; [self display]; return self; }
  125. - (float)absoluteMin { return [cell absoluteMin]; }
  126. - setAbsoluteMin:(float)value { [cell setAbsoluteMin:value]; return self; }
  127. - takeAbsoluteMinFrom:sender
  128. { [cell setAbsoluteMin:[sender floatValue]]; [self display]; return self; }
  129. - (float)absoluteRange { return [cell absoluteRange]; }
  130.  
  131. // Relative Values
  132. - (int)relativeIntValue { return [cell relativeIntValue]; }
  133. - (float)relativeFloatValue { return [cell relativeFloatValue]; }
  134. - resetRelativeValue { [cell resetRelativeValue]; return self; }
  135.  
  136. // Snap back characteristic
  137. - (BOOL)snapsBack { return [cell snapsBack]; }
  138. - setSnapsBack:(BOOL)flag { [cell setSnapsBack:flag]; return self; }
  139. - takeSnapsBackFromSwitch:sender
  140. { [cell setSnapsBack:[sender state]]; [self display]; return self; }
  141. - (float)snapBackValue { return [cell snapBackValue]; }
  142. - setSnapBackValue:(float)val { [cell setSnapBackValue:val]; return self; }
  143. - takeSnapBackValueFrom:sender
  144. { [cell setSnapBackValue:[sender floatValue]]; [self display]; return self; }
  145.  
  146. // Dash interval (set in degrees or points depending on displayMode)
  147. - (float)dashInterval { return [cell dashInterval]; }
  148. - setDashInterval:(float)val 
  149.   // wave fixed this.  This was a crasher...
  150.   if (val < 1.0) 
  151.   { val = 1.0; 
  152.   } 
  153.   [cell setDashInterval:val]; 
  154.   return self; 
  155. }
  156. - takeDashIntervalFrom:sender
  157. { [cell setDashInterval:[sender floatValue]]; [self display]; return self; }
  158.  
  159. // Showing the main dash
  160. - (BOOL)showMainDash { return [cell showMainDash]; }
  161. - setShowMainDash:(BOOL)flag { [cell setShowMainDash:flag]; return self; }
  162. - takeShowMainDashFromSwitch:sender
  163. { [cell setShowMainDash:[sender state]]; [self display]; return self; }
  164.  
  165. // Color of the ThumbWheel
  166. - (NXColor)color { return [cell color]; }
  167. - setColor:(NXColor)color { [cell setColor:color]; return self; }
  168. - takeColorFrom:sender { [self setColor:[sender color]]; return self; }
  169.  
  170. // tag and disabled
  171. - takeTagFrom:sender { [self setTag:[sender intValue]]; return self; }
  172. - takeDisabledFromSwitch:sender
  173. { [self setEnabled:![sender state]]; [self display]; return self; }
  174.  
  175. - (const char *)getInspectorClassName { return "PAThumbWheelInspector"; }
  176.  
  177. // drag and drop color stuff...
  178. - (NXDragOperation)draggingEntered:sender  {  return NX_DragOperationGeneric; }
  179. - (NXDragOperation)draggingUpdated:sender  {  return NX_DragOperationGeneric; }
  180. - draggingExited:sender { return self;  }
  181. - (BOOL)prepareForDragOperation:sender {  return YES; }
  182.  
  183. - (BOOL)performDragOperation:sender
  184. {
  185.    Pasteboard *pboard = [Pasteboard newName:NXDragPboard];
  186.    NXColor  aColor;
  187.  
  188.    aColor = NXReadColorFromPasteboard(pboard);
  189.    [self setColor:aColor];
  190.    [cell setColorChanged:YES];
  191.    [self display];
  192.  
  193.    return YES;
  194. }
  195.  
  196. - concludeDragOperation:sender {  return self; }
  197.  
  198.  
  199.  
  200.  
  201. @end
  202.